<script>
    window.$f = null;
    (function () {
        var create = (function () {
            var getRule = function () {
                var rule = <?=json_encode($form->getRules())?>;
                rule.forEach(function (c) {
                    if ((c.type == 'cascader' || c.type == 'tree') && Object.prototype.toString.call(c.props.data) == '[object String]') {
                        if (c.props.data.indexOf('js.') === 0) {
                            c.props.data = window[c.props.data.replace('js.', '')];
                        }
                    }
                });
                return rule;
            }, vm = new Vue,name = 'formBuilderExec<?= !$form->getId() ? '' : '_'.$form->getId() ?>';
            var _b = false;
            window[name] =  function create(el, callback) {
                if(_b) return ;
                _b = true;
                if (!el) el = document.getElementById('formdiv');
                window.$f = formCreate.create(getRule(), {
                    el: el,
                    form:<?=json_encode($form->getConfig('form'))?>,
                    row:<?=json_encode($form->getConfig('row'))?>,
                submitBtn:<?=$form->isSubmitBtn() ? '{}' : 'false'?>,
                resetBtn:<?=$form->isResetBtn() ? 'true' : '{}'?>,
                iframeHelper:true,
                    global:{
                    upload: {
                        props:{
                            onExceededSize: function (file) {
                                vm.$Message.error(file.name + '超出指定大小限制');
                            },
                            onFormatError: function () {
                                vm.$Message.error(file.name + '格式验证失败');
                            },
                            onError: function (error) {
                                vm.$Message.error(file.name + '上传失败,(' + error + ')');
                            },
                            onSuccess: function (res, file) {
                                if (res.code == 200) {
                                    file.url = res.data.filePath;
                                } else {
                                    vm.$Message.error(res.msg);
                                }
                            },
                        },
                    },
                },
                //表单提交事件
                onSubmit: function (formData) {
                    $f.btn.loading(true);
                    $.ajax({
                        url: '<?=$form->getAction()?>',
                        type: '<?=$form->getMethod()?>',
                        dataType: 'json',
                        data: formData,
                        success: function (res) {
                            if (res.code == 1) {
                               $.models.toastr_success(res.msg,function(){
                                   $f.btn.loading(false);
                                  // setTimeout(function(){window.location.reload(),2000});
                               });
                               /* vm.$Message.success(res.msg);
                                $f.btn.loading(false);
                                formCreate.formSuccess && formCreate.formSuccess(res, $f, formData);
                                callback && callback(0, res, $f, formData);*/
                                //TODO 表单提交成功!
                            } else {
                                $.models.toastr_error(res.msg || '表单提交失败');
                                $f.btn.loading(false);
                                /*vm.$Message.error(res.msg || '表单提交失败');
                                $f.btn.loading(false);
                                callback && callback(1, res, $f, formData);*/
                                //TODO 表单提交失败
                            }
                        },
                        error: function () {
                            $.models.toastr_error('表单提交失败');
                            $f.btn.loading(false);
                        }
                    });
                }
            });
                return $f;
            };
            return window[name];
        }());
        create();
    })();
</script>